import 'package:get/get.dart';
import '../services/index.dart';
import '../models/index.dart';
import '../utils/index.dart';

/// 用户资料访问Mixin
/// 
/// 🎯 企业级用户信息访问统一入口
/// 
/// 职责：
/// - 为Controller提供统一的用户信息访问接口
/// - 避免Controller直接访问UserService的复杂逻辑
/// - 统一命名规范和访问模式
/// - 减少重复代码，保持架构清晰
/// - 委托给Utils层提供计算后的便捷访问器
/// 
/// 使用方式：
/// ```dart
/// class MyController extends GetxController with UserProfileMixin {
///   void someMethod() {
///     if (isLoggedIn) {
///       print('用户ID: $userId');
///       print('用户名: $userName');
///       print('用户等级: $userLevelName');  // 委托给LevelUtil
///     }
///   }
/// }
/// ```
mixin UserProfileMixin {
  // 获取UserService实例
  UserService get _userService => Get.find<UserService>();

  // ==================== 核心状态访问 ====================
  
  /// 获取当前用户信息模型
  UserEntity? get currentUserProfile => _userService.currentUserProfile;
  
  /// 检查是否已登录
  bool get isLoggedIn => _userService.isLoggedIn;
  
  // ==================== 用户基本信息访问器 ====================
  
  /// 获取用户ID
  int get userId => _userService.currentUserProfile?.userid ?? 0;
  
  /// 获取用户ID字符串
  String get userIdStr => _userService.currentUserProfile?.userid.toString() ?? '';
  
  /// 获取用户名
  String get userName => _userService.currentUserProfile?.username ?? '';
  
  /// 获取用户显示名称
  String get userDisplayName => _userService.currentUserProfile?.displayName ?? '未知用户';
  
  /// 获取用户头像URL
  String get userAvatarUrl => _userService.currentUserProfile?.avatarUrl ?? '';
  
  /// 获取用户邮箱
  String get userEmail => _userService.currentUserProfile?.userEmail ?? '未设置';
  
  /// 获取用户手机号
  String get userPhone => _userService.currentUserProfile?.userPhone ?? '未设置';
  
  /// 获取用户性别
  String get userGender => _userService.currentUserProfile?.userGender ?? '未知';
  
  /// 获取用户性别文本（委托给Model层）
  String get userSex => _userService.currentUserProfile?.sexText ?? '未知';
  
  /// 🎯 获取用户年龄（委托给Model层动态计算）
  /// 
  /// 年龄根据生日动态计算，确保数据一致性
  /// - Model层委托给AgeUtil进行计算
  /// - 生日变更时，年龄自动更新
  /// - 无需手动维护userAge字段
  /// 
  /// 示例：
  /// ```dart
  /// Text('${controller.userAge}岁')  // 自动根据生日计算
  /// ```
  int get userAge => _userService.currentUserProfile?.age ?? 0;
  
  /// 获取用户生日
  String get userBirthday => _userService.currentUserProfile?.userBirthday ?? '';
  
  /// 获取用户城市
  String get userCity => _userService.currentUserProfile?.userCity ?? '未知';
  
  /// 获取用户个性签名
  String get userSignature => _userService.currentUserProfile?.userSignature ?? '';
  
  /// 获取用户状态
  String get userStatus => _userService.currentUserProfile?.statusText ?? '未知';
  
  /// 获取用户等级
  int get userLevel => _userService.currentUserProfile?.userLevel ?? 0;
  
  /// 获取用户积分
  int get userPoints => _userService.currentUserProfile?.userPoints ?? 0;
  
  /// 获取用户点赞数
  int get userLikes => _userService.currentUserProfile?.userLikes ?? 0;
  
  /// 获取用户粉丝数
  int get userFollowers => _userService.currentUserProfile?.userFollowers ?? 0;
  
  /// 获取用户标签
  List<String> get userTags => _userService.currentUserProfile?.userTags ?? [];
  
  /// 获取用户爱好
  List<String> get userHobbies => _userService.currentUserProfile?.userHobbies ?? [];
  
  /// 获取用户相册图片
  List<String> get userImgUrls => _userService.currentUserProfile?.userImgUrls ?? [];
  
  /// 获取用户常出没地
  String get userFrequentPlaces => _userService.currentUserProfile?.userFrequentPlaces ?? '';
  
  // ==================== 融云相关访问器 ====================
  
  /// 获取融云Token
  String get rongcloudToken => _userService.currentUserProfile?.rongcloudToken ?? '';
  
  /// 获取融云用户ID
  String get rongcloudUserId => _userService.currentUserProfile?.rongcloudUserId ?? '';
  
  // ==================== 实名认证相关访问器 ====================
  
  /// 获取实名认证信息
  Map<String, dynamic>? get realNameAuth => _userService.currentUserProfile?.realNameAuth;
  
  /// 是否已实名认证
  bool get isRealNameVerified => _userService.currentUserProfile?.isRealNameVerified ?? false;
  
  // ==================== 计算型访问器（委托给Utils层）====================
  
  /// 🎯 获取用户等级名称（委托给LevelUtil）
  /// 
  /// 根据用户积分自动计算等级名称
  /// 符合数据处理黄金实践：Mixin层委托给Utils层处理计算逻辑
  /// 
  /// 示例：
  /// ```dart
  /// Text(controller.userLevelName)  // 显示："大玩家"
  /// ```
  String get userLevelName => LevelUtil.getLevelNameFromPoints(userPoints);
  
  /// 🎯 获取用户等级进度信息（委托给LevelUtil）
  /// 
  /// 返回包含当前等级、下一等级、进度百分比等完整信息
  /// 
  /// 示例：
  /// ```dart
  /// final progress = controller.userLevelProgress;
  /// print('当前等级：${progress.currentLevelName}');
  /// print('升级进度：${progress.progress}%');
  /// print('距离下一级：${progress.pointsToNext}积分');
  /// ```
  LevelProgress get userLevelProgress => LevelUtil.getLevelProgress(userPoints);
}
